#pragma once


#include<iostream>
#include<string>

#include"util.hpp"

namespace ns_log
{
    //展开工具类命名空间
    using namespace ns_util;

    //日志等级 
    enum
    {
        INFO,//0（常规提示）
        DEBUG,//1（调试信息)
        WARNING,//2(告警)
        ERROR,//3(程序错误产生中断)
        FATAL//4(系统错误)
    };

    //将日志写入缓冲区(参数：日志等级、文件名、行号)
    inline std::ostream& Log(const std::string& level, const std::string& file_name, int line)
    {
        //添加日志等级
        std::string message = "[";
        message += level;
        message += ']';  

        //添加报错文件名
        message += "[";
        message += file_name;
        message += "]";

        //添加出报错行数
        message += "[";
        message += std::to_string(line);
        message += "]"; 

        //添加出报错时间
        message += "[";
        message += TimeUtil::GetTimeStamp();//获取时间
        message += "]";

        //流对象cout中包含缓冲区,将数据写入缓冲区
        std::cout<<message;//只要不endl将数据刷新，则数据就会一直暂存缓冲区

        return std::cout; 
    }

    //开放式日志（只要传入日志等级便可调用）（在宏定义中，只要加#号，便可实现取参数名）
    #define LOG(level) Log(#level, __FILE__, __LINE__)
}